<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>14-预解析</title>
    <script>
        //js引擎运行js分为两步： 1.预解析 2.代码执行
        //1.预解析：js引擎会把js里面所有的var 和function 提升到当前作用域的最前面
        //1.1 变量预解析（变量提升）：把所有的变量声明提升到当前作用域的最前面，但是不提升赋值操作
        //1.2 函数预解析（函数提升）：把所有的函数声明提前到当前的作用域最前面，但是不调用函数
        //2.代码执行：按照代码书写的顺序从上往下执行

        //问题1
        console.log(num);

        //问题2
        console.log(num);//undefined 坑1
        var num = 10;
        //相当于执行了以下代码：
        //var num;
        //console.log(num);

        //问题3
        fn();
        function fn(){
            console.log(11);
        }
        //相当于：
        //function fn(){
        //    console.log(11);
        //}
        //fn();

        //问题4
        fun();//报错 坑2
        var fun = function(){
            console.log(22);
        }
        //注意：函数表达式的调用必须写在函数表达式的下面
        //相当于执行了以下代码
        //var fun;
        //fun();
        //fun = function(){
        //    console.log(22);
        //}

    </script>
</head>
<body>
    
</body>
</html>